home *** CD-ROM | disk | FTP | other *** search
- /*
- * This routine causes another PING to be transmitted, and then
- * schedules another SIGALRM for 1 second from now.
- *
- * Our sense of time will slowly skew (i.e., packets will not be launched
- * exactly at 1-second intervals). This does not affect the quality
- * of the delay and loss statistics.
- */
-
- #include "defs.h"
-
- sig_alarm()
- {
- int waittime;
-
- send_ping(); /* first send another packet */
-
- if (npackets == 0 || ntransmitted < npackets)
- /*
- * If we're not sending a fixed number of packets,
- * or if we are sending a fixed number but we've still
- * got more to send, schedule another signal for 1 second
- * from now.
- */
-
- alarm(1);
-
- else {
- /*
- * We've sent the specified number of packets.
- * But, we can't just terminate, as there is at least one
- * packet still to be received (the one we sent at the
- * beginning of this function).
- * If we've received at least one packet already, then
- * wait for 2 times the largest round-trip time we've seen
- * so far. Otherwise we haven't received anything yet from
- * the host we're pinging, so just wait 10 seconds.
- */
-
- if (nreceived) {
- waittime = 2 * tmax / 1000; /* tmax is millisec */
- if (waittime == 0)
- waittime = 1;
- } else
- waittime = MAXWAIT;
-
- signal(SIGALRM, sig_finish); /* change the signal handler */
- alarm(waittime); /* schedule the signal */
- }
- return;
- }
-